Often, systems have multiple options. However, those options may not all be compatible with each other. For example, a person may be selecting components for a new personal computer. If the person (e.g., end-user) chooses a certain peripheral (e.g., graphics card) for the computer, that peripheral may require a certain minimum amount of memory and/or CPU speed. Configuration software may be used to assist the end-user and enforce these rules. However, present configuration systems have certain drawbacks.
The configuration of complex systems typically requires a large number of rules. Maintaining these rules is burdensome. When new configuration options are added to the system, existing rules may need to be modified, and new rules may need to be added. This problem is compounded when different components in the system come from different manufactures, because the information needed to generate the rules may not be available.